package org.triumphxx.minio.controller;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.triumphxx.minio.service.MinIoService;

import javax.annotation.Resource;
import java.time.ZonedDateTime;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @author:triumphxx
 * @Date:2023/5/28
 * @Time:20:58
 * @微信公众号：北漂码农有话说
 * @网站：https://blog.triumphxx.com.cn
 * @GitHub https://github.com/triumphxx
 * @Desc: 文件上传
 **/
@RestController
public class MinIoController {
    @Resource
    MinIoService minIoService;

    /**
     * 针对于前端的直接上传文件格式的接口
     * @param file
     */
    @PostMapping("/upload")
    public void uploadToFile(@RequestParam("file") MultipartFile file){
        minIoService.uploadToFile(file);
    }
    /**
     * 针对于后端文件流的形式上传文件
     * @param file
     */
    @PostMapping("/uploadToFileInputStream")
    public void uploadToFileInputStream(@RequestParam("file") MultipartFile file){
        minIoService.uploadToFile(file);
    }
    /**
     * 获取 一定有效期的图片连接
     * @param name 文件名称
     * @param time 时间 单位：天
     * @return
     */
    @GetMapping("/getFileUrl")
    public String getFileUrl(@RequestParam("name") String name , @RequestParam("time") int time){
       return minIoService.getUrl(name,time, TimeUnit.DAYS);
    }

    /**
     * 获取 文件签名
     * @param name 文件名称
     * @return
     */
    @PostMapping("/getPolicyUrl")
    public Map getPolicyUrl(@RequestParam("name") String name){
        return minIoService.getPolicyUrl(name, ZonedDateTime.now());
    }

    /**
     * 获取 临时文件连接
     * @param name 文件名称
     * @return
     */
    @PostMapping("/getTempFileUrl")
    public String getTempFileUrl(@RequestParam("name") String name, @RequestParam("time") int time){
        return minIoService.getFileUrl(name, time,TimeUnit.DAYS);
    }
}
